// Proxy 是 Object.defineProperty的升级版
// 主要是监听对象的操作过程
const person =  {
    name: "sanfeng_hu",
    age: 18
}

const personProxy = new Proxy(person,{
    get(target, property) {
        console.log(target, property)
        return property in target? target[property]:"sanfeng_hu"
    },
    set(target, property, value) {
        console.log(target, property, value)
        if(property=='age'&& value < 18 ) {
            target[property] = 18
        } else {
            target[property] = value;
        }
    }
})
// 默认调用 get
console.log(personProxy.name)

personProxy.age = 15
console.log(personProxy.age)

// Proxy VS object.defineProperty()
// defineProperty 只能监视属性的读写
// proxy 能够检测到更多的对象操作

const person1 = {
    name: "sanfeng_hu",
    age: 18
}

const personProxy1 = new Proxy(person1, {
    deleteProperty(target, property) {
        console.log(target, property)
        delete target[property]
    }
})

delete personProxy1.name
console.log(personProxy1)

// 触发方式====》方法  截图

// Proxy 更好的支持数组对象的监视，比如
const list = []
const listProxy = new Proxy(list, {
    set(target, property,value) {
        console.log(target, property,value)
        target[property] = value
       return true
    }
})

// Proxy 是以非侵入的方式监控对象操作，不对对象本身做任何操作


listProxy.push(100)














